約 5,607,206 件
https://w.atwiki.jp/toho/pages/4343.html
Volatile Vacuity サークル:OG-G Music Works Number Track Name Arranger Original Works Original Tune Length 01 Who is... (Extended scarlet mix) vorbis 東方紅魔郷 U.N.オーエンは彼女なのか? [05 16] 02 Nocturne ~Eastern Nightmare vorbis 東方永夜抄 永夜抄 ~ Eastern Night. [04 48] 03 Lovely^2 Raver Gir vorbis 東方永夜抄 少女綺想曲 ~ Dream Battle [04 27] 04 上海大麻館 ~Toxic tea (Why Is M.H. Dead ?) vorbis 東方紅魔郷 上海紅茶館 ~ Chinese Tea [05 15] 05 MoonOrbit vorbis 東方永夜抄 千年幻想郷 ~ History of the Moon [06 59] EX ゆっくりした結果が天空脳だよ! vorbis 東方 ? [02 19] 詳細 紅のひろば(2009/2/15)にて頒布 イベント価格:?円 ショップ価格:?円(税込:?円) レビュー 名前 コメント
https://w.atwiki.jp/free-gaming/pages/50.html
エンジン名 Volatile3D Engine リリース日 N/A 開発元 Chain Studios 公式サイト http //chainstudios.hlfx.ru ジャンル ゲームエンジン 概要 Wolframに使用されているChain Studios作成のゲームエンジン。 ゲーム一覧 Wolfram
https://w.atwiki.jp/freememo/pages/99.html
概要 基本データ型 サイズ修飾子 符号修飾子 型修飾子const volatile 記憶クラス指定子auto(自動変数) static(静的変数) extern(外部変数) register(レジスタ変数) typedef enum型(列挙型) 参考 コメント 概要 変数には型があり、これにより、データの性質、数値、範囲が表現される。この型を示すのに、int, unsigned const等が変数の前に指定される。 TOP 基本データ型 型 名称 備考 char 文字型 int 整数型 float 浮動小数点型 short 短長整数型 long 倍長整数型 double 倍制度実数型 long double(拡張精度実数型) void 型なし TOP サイズ修飾子 long, short は、基本データのサイズを修飾し、標準以上 or 標準以下を指定する。 例) 型指定 内容 short int int型サイズ以下 long int int型サイズ以上 long double double型サイズ以上 整数型の大小関係 short int ≦ int ≦ long int 浮動小数点型の大小関係 float ≦ double ≦ long double TOP 符号修飾子 signed, unsigned は、符号を修飾する。 例) 型指定 範囲 char -128~127 signed char -128~127 unsigned char 0~255 尚、明示的に、「signed」を使用することはあまりない。 TOP 型修飾子 const const修飾子は、値の初期化はできるが、変更できない変数を指定する。 例) const int i = 10; // コンパイルエラーとなる。 i = 10; // ポインタ変数pが保持しているアドレスにある変数を上書きできない。 const int *p; // pが保持しているアドレスを変更できない int *const p; C++の場合、明確に型がわかるので、「#define」を使用するよりは「const」を利用する方がよい。 例) #define MAX_SIZE (256) const int MAX_SIZE = 256; volatile コンパイラの判断によって、最適化されることを禁止する。 最適化により、ある変数の値が変更される場合、プログラマが意図しない動作になってしまう可能性がある。 基本的に、最適化方法はソースコード上だけでは、見ても判断つかない。 TOP 記憶クラス指定子 auto(自動変数) C言語では、デフォルトで「auto」が指定されているので、全く不要な指定子です。 static(静的変数) 静的変数は、常にメモリを一部占有し、大きく次の二つに分けられる。 静的ローカル変数 静的ローカル変数は、宣言された関数が終了しても、メモリ上から消えることはない。 初期化されるタイミングはプログラムの開始時で、このとき、明示的に初期化しなくても、自動的に0に設定される。 また、この変数は宣言された関数内でのみ参照できる。 静的グローバル変数 基本的な内容は、静的ローカル変数と同じ。但し、この変数は、同一ソースファイル内のみ参照できる。 静的関数 この関数は、同一ソースファイル内のみ参照できる。 extern(外部変数) 外部変数は、関数外で定義され、どの関数からも参照できる。常にメモリの一部を占有し、その値を保持する。 内部定義 変数定義が同じソースファイルにある場合。 外部定義 変数定義が異なるソースファイルにある場合。 register(レジスタ変数) 基本的に、CPUにあるレジスタに変数の値を割り当てる。空いているレジスタがない場合、自動変数(auto)となる。 (レジスタはメモリよりも高速にアクセス可。) 使用頻度の高い変数に用いると処理速度の高速化が図れる。 但し、コンパイラの最適化により「register」を付けても必ずしも高速化になるとは限らないので、 レジスト変数も「auto」と同様あまり意味がない。尚、使用するには、以下の制限がある。 ポインタ変数にregisterは付けられない。 アドレスはメモリ上の番地であり、レジスタに番地はないので、そもそもアドレスが取得できない。 グローバル変数や静的変数に registerを付けることはできまない。 レジスタの個数には制限があり、これらの変数はプログラム実行中、常に存在しなくてはならないため、レジスタが埋まってしまうので。 typedef 既存のデータ型に、別の型名を与える。 <書式> typedef [既存のデータ型] [別の型名]; 例)型 typedef unsigned int size_t; // stddef.h 例)構造体 typedef struct { int age; char name[80]; }HUMAN; HUMAN h; 例)関数 typedef int (*PFUNC) (int, char*); PFUNC func; 例)STL typedef std vector int VEC_INT; TOP enum型(列挙型) enum 列挙型名 {列挙定数リスト} 変数リスト; 例1) enum coltype {red, green, blue} color; 例2) enum coltype {red, green, blue} color1, color2; 例3) enum coltype {red, green, blue}; enum coltype color, work[10]; 例4) enum {red, green, blue} color; 上記いずれの場合も値は、 red = 0, green = 1, blue = 2 となる。 但し、下記のように宣言すると、 例5) enum coltype {red, green = 5, blue} color; red = 0, green = 5, blue = 6 となる。 TOP 参考 「#define」を使用するより、代わりに「const」「typedef」「enum」を使用した方がいい場合がある。 TOP コメント 名前 コメント TOP
https://w.atwiki.jp/gtalcs/pages/19.html
A VOLATILE SITUATION レーダーのJDのJのマークに行き、マーカーに入るとミッション開始。事前にAmmu-NationからMicro SMGの弾薬をたっぷり買うことをお薦めします。 [カットシーン] JD Hey Toni, I can t come out right now, i m busy you know? トニー、俺は今出られない、忙しいんだ? Toni Why? What s going on in there?...and what the hell is that smell? なぜだ?そこで何が起きてる?...それとこの臭いはなんだ? JD Look, Toni, we re catering for some real ah...specialists today. トニー、今日は本物のスペシャリストの...特別出張サービスが来ているんだ。 This stuff is internet gold-dust? このブツはインターネットの砂金だぜ? What you should be concerning yourself with is that Leone gaming house, up in Saint Mark s. お前が心配するべきなのは、あのSaint Marksにあるレオーネのゲーム館だ。 The Sindaccos are going nuts about it. シンダッコの連中が怒っているぞ。 I heard they re gonna blow the place off the map. 俺の聞いたところによると、奴らはそこを地図から消すつもりらしい。 [ミッション開始] Check out the Casino. カジノに行け。 カジノに行くとJDから電話が来る。 JD Toni? it s JD. トニー?JDだ。 Look, I just heard here s a bunch of Sindacco goons coming your way. 聞いてくれ、シンダッコの連中一味がそこへ向かっていると聞いた。 And they re packing, big-time! 奴らは爆弾を持ってやってくるぞ! Watch yourself! 気をつけろ。 赤いマークで表示された敵がカジノに爆弾を仕掛けに来る。3回来たうちで、2発食らうとおしまい。無理に追いかけずカジノ近辺で待機し、相手がくるのを待つ。近づくと彼らは車から降りてくるので、ドライブバイで殺す。 The Sindaccos have rigged a huge truck bomb! They re going to take out the Casino in one go! シンダッコの連中が爆弾仕掛けのトラックでやってくるぞ!一発でカジノをしとめに来るぞ! Stop the truck bomb destroying the Casino! カジノを破壊されないためトラックを止めろ! 3台来た車を追い払うと、今度はトラックがやってくる。しかもやられたらミッションが失敗になってしまう。追って行って取り逃したら一貫の終わりなので、カジノを離れないで、入り口でやってくるトラックを待つ。トラックがやってきたら、そのトラックに乗り込み、右上のセーフバーが溜まるところまで離れ、トラックから降り、トラックの爆風に巻きこまれないように逃げる。これでミッションクリア。報酬は$1,000。
https://w.atwiki.jp/aviutl-plugin/pages/59.html
Charlie s volatile short 作者/Charlie氏 ブログトップページ 配布ページA…http //blog.mura.com/blogs/index.php/charlie/2008/11/03/source_deblocking_filter_for_aviutl 配布ページB…http //blog.mura.com/blogs/index.php/charlie/2008/04/29/deupcon ソースのデブロック プラグイン最終更新日/2008-11-03 Ver./Lv.1 Exp.3 配布(圧縮)ファイル名/dmb.zip(配布ページA)更新内容/初公開? 初期ファイル名/dmb.auf メニュー内プラグイン名/ソースのデブロック 表示場所/フィルタ&設定 AviUtl対応Ver./? GPU利用/? CPU高速化命令利用/SSE2? CPUマルチスレッド高速化利用/○? 必須ファイル等/× 「Plugins」フォルダ内動作/○ 対応解像度/? インターレース対応/? YUY2フィルターモード対応/? 制限/? 取説同梱/× 解説ページ/配布ページA ソース公開/× 詳細/“MPEG系の動画ソースのブロックノイズを低減します。具体的には、8×8のブロック状にのっぺりとした領域を検出して、その中での輝度・色の変化を平均化します。” 強度「30」閾値「100」が汎用的な値らしい。配布ページを熟読するのが無難。 アプコン解除プラグイン最終更新日/2008-04-29 Ver./Lv.1 Exp.1 配布(圧縮)ファイル名/deupcon.zip(配布ページB)更新内容/初公開? 初期ファイル名/deupcon.auf メニュー内プラグイン名/deupcon 表示場所/フィルタ&設定 AviUtl対応Ver./? GPU利用/? CPU高速化命令利用/? CPUマルチスレッド高速化利用/? 必須ファイル等/× 「Plugins」フォルダ内動作/○ 対応解像度/? インターレース対応/? YUY2フィルターモード対応/? 制限/? 取説同梱/README.txt(中身は配布ページBへのリンクのみ) 解説ページ/配布ページB ソース公開/× 詳細/“不可逆的に失敗したYC分離の残像とアプコン縞の低減を”行うプラグイン。配布ページを熟読するのが無難。
https://w.atwiki.jp/zensensyu/pages/585.html
C言語 482 名前:水先案名無い人 :2005/04/20(水) 00 36 52 ID aG+CfPLt0 C言語(C95規格)全キーワード入場!! 手動最適化は生きていた!! 更なる研鑚を積みレジスタ割当が甦った!!! 記憶クラス指定子!! registerだァ――――!!! この値の時の処理はすでに我々が完成している!! switch分岐先 caseだァ――――!!! たどり着きしだいスキップしまくってやる!! ループ制御代表 continueだァッ!!! 3Dゲームの計算なら我々の演算速度がものを言う!! 単精度の浮動少数点数 フローティングナンバー float!!! 真のサイズを知りたい!! 静的サイズ取得演算子 sizeofだァ!!! longは最低32bit長だがlong longなら64bitはオレのものだ!! 大きめの整数型 longだ!!! リンカ対策は完璧だ!! 記憶クラス指定子 extern!!!! 全ループのベスト・ジェネラルは私の中にある!! ループの神様が来たッ for!!! 戻り値なら絶対に返せん!! 型無視のキャスト(void*)見せたる 特殊型 voidだ!!! マルチスレッド(割り込みあり)ならこいつが頼り!! 変数の型修飾子 volatileだ!!! 幾つかの型から新たな型が誕生だ!! 構造体 struct!!! マイナスの無い整数が使いたいから無符号(正数)になったのだ!! プロの型を見せてやる!! unsigned!!! 条件判断するまえにに一回だけとはよく言ったもの!! 達人のループが今 実践でバクハツする!! マニアックループ doだ―――!!! C言語多義語チャンプこそがキーワード最強の代名詞だ!! まさかこのキーワードがきてくれるとはッッ static!!! メモリを節約したいからこれを使ったっ!! サイズ一切不明!!!! C言語のショート(みじかめ)整数 shortだ!!! オレたちは分岐最強ではない全制御構造で最強なのだ!! 御存知複数分岐 switch!!! 分岐の本場は今や条件非成立時にある!! オレを実行させる条件文はないのか!! elseだ!!! 精度デカカァァァァァいッ精度は環境依存!! (代表的には)64bit長!!! 15桁!!! doubleだ!!! 整数は実践で使えてナンボのモン!!! 超実用整数!! 本家組み込み型からintの登場だ!!! フロー制御はオレのもの 邪魔するループは思いきり中断し思いきり脱出するだけ!! ループ脱出統一王者 break 条件を試して分岐したッ!! 単方向分岐 if!!! #define定数に更なる磨きをかけ ”列挙型”enumが帰ってきたァ!!! このswitchに死角はないッッ!! 全case不一致時ラベルdefault!!! 中国四千年の文字は入りきらない!! 文字型から charだ!!! 低レベルプログラミングでならオレはいつでも全盛期だ!! 共用体 union メモリイメージ依存で登場だ!!! 構造化プログラミングはどーしたッ 古の慣習 未だ消えずッ!! 進むも戻るも思いのまま!! gotoだ!!! 特に理由はないッ 整数が符号付きなのは当たりまえ!! charがunsignedな処理系にはないしょだ!!! 符号付き整数! signedがきてくれた―――!!! C++で磨いた実戦指定子!! C言語の逆輸入キーワード constだ!!! 実践だったらこのキーワードを外さないことはない!! 超A級指定子 autoだ!!! 超一流言語の超一流の別名だ!! 生で拝んでオドロキやがれッ 型名のエイリアス!! typedef!!! 無限ループはこのキーワードが完成させた!! メインループの切り札!! whileだ!!! 戻り値が帰ってきたッ どこへ行っていたンだッ 実行位置ッ 俺達は君を待っていたッッッreturnの登場だ――――――――ッ 加えてC99規格に備え新たなキーワードを5つ御用意致しました! 複素数計算 _Complexと_Imaginary!! 真偽値 _Bool!! 最適化の指針! restrict! ……ッッ どーやらもう一つはインライン展開されてしまった様ですが、 ソース中で発見次第ッ皆様にご紹介致しますッッ 関連レス 498 名前:水先案名無い人 :2005/04/20(水) 15 58 13 ID jPwat9if0 482-485 これまた思いもよらぬところから...GJ! コメント 名前
https://w.atwiki.jp/slimelv1024/pages/57.html
ポインタとは アドレスを記憶する変数です ポインタを話す上でこれは欠かせない要素なのでよく覚えていてください ポインタはアドレスを記憶し間接的にメモリを参照することが出来ます メモリ上のアドレスを指定してあげることで間接的に変数や配列の操作を行うことが出来ます アドレス アドレスとはメモリ上の番地のことです プログラムもデータもこのメモリ上のアドレスに記憶されています 今まで使ってきた変数や配列はメモリ上に割り振られ、それぞれのアドレス持っています それぞれの領域は型のデータサイズに依存し、char型なら1バイトの領域を占め、int型の要素数3の配列なら12バイトの領域を占める 変数や配列のアドレス int a=123; char str1[]="ABC"; char str2[][7]={"TANAKA", "SATOU", "SUZUKI"} printf("a=%d\n",a); printf(" a=%p\n", a); printf("\n"); printf("str1=%p\n",str1); printf("str1[0]=%c\n",str1[0]); printf("str1[1]=%c\n",str1[1]); printf("str1[2]=%c\n",str1[2]); printf(" str1[0]=%p\n", str1[0]); printf(" str1[1]=%p\n", str1[1]); printf(" str1[2]=%p\n", str1[2]); printf("\n"); printf("str2=%p\n",str2); printf("str2[0]=%p\n",str2[0]); printf("str2[1]=%p\n",str2[1]); printf("str2[2]=%p\n",str2[2]); printf("str2[0][0]=%c\n",str2[0][0]); printf("str2[1][0]=%c\n",str2[1][0]); printf("str2[2][0]=%c\n",str2[2][0]); printf(" str2[0][0]=%p\n", str2[0][0]); printf(" str2[1][0]=%p\n", str2[1][0]); printf(" str2[2][0]=%p\n", str2[2][0]); 指定している変数は同じなのに値が違って出てきます これは でメモリ上のアドレスを指定しているからです (アンパサンド)はアドレス演算子と呼ばれ、変数のアドレスを取り出します プログラマにはどこのアドレスに変数が割り当てられたのか分からないので、アドレスを求めるためにアドレス演算子を使います scanfで使う も同じでアドレスを渡していたのです 変数名 変数の値 変数 変数のアドレス 配列名 配列の先頭アドレス 配列名[添字] 配列要素の値 配列名[添字] 配列要素のアドレス 配列名 配列先頭アドレス 配列[行] 行の先頭要素のアドレス 配列[行][列] 配列要素の値 配列名[行][列] 配列要素のアドレス 一次元配列のアドレスを見てもらえると分かりやすいと思いますが、配列のアドレスは並んでいます 配列は必ず並びでアドレス領域が確保されます これは二次元配列でも同じです puts関数とgets関数 入出力の項で少しだけ触れたこの関数ですが、二つとも引数でアドレスを受け取れるように出来ています char str[256]; puts("文字列を入力してください") gets(str); puts(str); ポインタ 一番最初に書きましたがポインタとはアドレスを記憶する変数です 今まで数字や文字を記憶するのに変数を使って来ました それと同じように変数のアドレスを記憶するのがポインタ変数なのです しかし、ポインタの意義はこの記憶されているアドレスを使って間接的にメモリを参照することです ちょっとややこしいですが、一つ一つ確認していきましょう ポインタの宣言 ポインタも変数なので宣言する必要があります データ型* ポインタ名; データ型 *ポインタ名; どちらも同じポインタ変数の宣言です 人によって宣言の仕方は違うので両方覚えておきましょう ここで使われてる*はポインタ宣言子と呼ばれます アドレスの代入 当然ポインタも変数なので宣言しただけでは中に不定値が入っています ポインタの変数名= 代入する変数名 先ほどの宣言とは違い、扱いは変数なのでここでは*は尽きません しかし、ポインタが記憶できるのはアドレスなので、代入する変数には を忘れないでください 変数とは少し扱いが違いますが、ここまでがポインタ変数の下準備です メモリの参照 *ポインタ名 ここで使われている*は間接参照演算子と呼ばれおり、ポインタの指すアドレスの中身を表します ポインタの宣言のときにも使いましたが、あの*とはまったくの別物です また、計算式のとき乗算として扱われる*とも別物です 乗算演算子とポインタ宣言子、間接参照子の三つの意味合いが*にあるのを覚えておきましょう ポインタの簡単な使用例 言葉だけでは分かりにくいと思うので実際にプログラムとして動かしてみましょう int num=100; int *p1,*p2; //ポインタの宣言 p1= num; //p1にnumのアドレスを代入 p2=p1; //p2にp1のアドレスを代入 *p2=*p1+1; //p1の指すアドレスの中身参照し、参照した値+1をp2の指すアドレスの中に代入 printf("numの値は%d numのアドレスは%pです\n",num, num); printf("*p1の値は%d *p1のアドレスは%pです\n",*p1,p1); printf("*p2の値は%d *p2のアドレスは%pです\n",*p2,p2); 実行結果 numの値は101 numのアドレスは01EFD84です *p1の値は101 *p1のアドレスは01EFD84です *p2の値は101 *p2のアドレスは01EFD84です すべて同じ値とアドレスが出てきたと思います(アドレスの出す値は環境によって変わります p2はp1のアドレスを記憶し、p1はnumのアドレスを記憶しています p2のアドレスの指す中身はp1であり、p1のアドレスの指す中身はnumなのです つまりp2は間接的にnumの100を取得し、間接的にnumの値を変えることが出来たのです ポインタと配列 配列の場合もポインタの宣言、アドレスの代入、アドレスの参照を必ず行います ただし、配列の場合参照する方法が二種類あります char name[7]="TANAKA"; char *p1,*p2; int i; p1=name; p2=name; for(i=0;*(p1+i)!=\0;i++){//方法1 printf("%c",*(p1+i)); } while(*p2!=\0){//方法2 printf("%c",*p2); p2++; } 方法1はポインタの値を変えずに参照しています この書き方で注意しなければならないのは()です ()を忘れると*p1にiを代入すると言う式になってしまいます 方法2はポインタの値を変えて参照しています こちらの方法は値を更新してしまっているため、もう一度使うときに更新したポインタを元に戻さないと、別のエリアを参照してしまいます 参照だけならいいですが、書き込みだった場合別のエリアのデータを破壊してしまいますので、注意が必要です ポインタと文字列リテラル 配列の項で文字列は書き換えることが出来ないと説明しましたが、ポインタを使うことで文字列を書き換えることが可能です char *p; p="ABC" このABCというのはメモリ上のどこかに用意された文字列です 文字列の先頭アドレスを取得することで、文字列の情報を入手することが出来ます つまりポインタが記憶する文字列の先頭アドレスを変えれば、文字列を書き換えることが出来るのです ポインタの配列 ポインタでも配列を扱うことが出来ます データ型 *配列名[要素数] 複数の文字列は二次元配列で扱っていましたが、ポインタの配列を使うと一次元配列で扱うことが出来ます char *p[3]={"abc","defghi","jk"}; puts(str[0]); puts(str[1]); puts(str[2]); 二次元配列と違い確保した空いてるスペースにNULL文字を入れる必要がない代わりに、文字列が並びで確保されず、文字列の先頭アドレスを記憶する領域が必要になるため、どちらを使うかは二つの特色を考えて選択しましょう
https://w.atwiki.jp/kumikomi-yitjc/pages/5.html
平たく言うと、 メモリアドレスを指し示す変数のこと メモリとは、 データの記憶装置。メモリアドレスを使って、保存データの場所を指示する まず、準備。プロジェクト(memory_test)を作る。これまでの操作に加えて、セクションの定義を以下の様にする。 たとえば、 char str[] = ABC ; int main() { return 0; } とかしたとすると、メモリには以下の様に記憶される。 (メモリアドレスは、セクションの設定で決まる。初期値のあるグローバル変数は、Dセクションに配置される。初期値のないグローバル変数はBセクションに配置される。) 0xFFE500 A 0xFFE501 B 0xFFE502 C 0xFFE503 \0 ↑メモリアドレス で、 char str[] = ABC ; int main() { printf( ADDRESS=%p\n , str); // %pはポインタのアドレスを表示するオプション return 0; } とかして、このプログラムを実行すると、 変数は、コンパイラがセクションの設定からアドレスを計算して、メモリに割り当てる。 試しに、モニタのコマンドを使って、メモリの内容を表示してみるとどうなるか? teratermで、 D FFE500[ENTER] としてみるとメモリを表示できる。 また、 int array[] = {0x1200, 0x002, 0x3333, 0x45, 0x5678}; int main() { return 0; } とかして、プログラムを動かすと、メモリは、 0xFFE500 array[0] 0x12 0x00 0xFFE502 array[1] 0x00 0x02 0xFFE504 array[2] 0x33 0x33 0xFFE506 array[3] 0x00 0x45 0xFFE508 array[4] 0x56 0x78 0xFFE50A array[5] ???? ???? 先程と同じように、モニタで確認してみよう。 ところで、メモリアドレスを直接指定してアクセスするにはどうしたらよいか? やり方、その1 ポインタ(変数)を使う方法 int main() { int *i = (int *)0xFFE500; *i = 0x1234; printf(“%d\n”, *i); return 0; } やり方、その2 直接アドレス指定 #define MEMORY (*(volatile int *)0xFFE500) int main() { MEMORY = 0x5678; printf(“%d\n”, MEMORY); return 0; } 以上のプログラムを実行して、モニタでメモリの状態を確認する。
https://w.atwiki.jp/fekai2/pages/34.html
ポインタ ここでいうポインタは、戦闘アニメを指定する(グラフィックやアニメや効果音等)ポインタの事。 アニメ移植or自作をするには是非とも知っておきたい。 スレ7章nTkMu418氏の解析がほとんどなので感謝しつつ読むように。あとはこまごまとした説明。 ▼戦闘アニメ指定ポインタ概要 1つのアニメは、識別子(12バイト)と5つのポインタ(4*5で計20バイト)で構成される。 識別子は、戦闘アニメポインタを見た時にそれがどの戦闘アニメのものであるかをわかりやすくするための文字列。 5つのポインタは、戦闘アニメのどのタイミングでどの画像を表示し、動かし、音を出し、HP減少やHITエフェクトを出すか、に関わる。 ▼識別子 StaringでRomを開いてアドレスC00000を見てみると。右側の方に「lorm_sp1」という文字列や似た物を確認できるはず。 これが識別子。「lorm_sp1」はLord-Men-Spearを略したもので「ロード男の戦闘アニメ」を意味する。 文字からクラスを推測できれば残りもわかるはず。FEditorで確認してもよい。 二つ目の「lorm_sp1」だが、こちらは「武器なし時のアニメ」である。 たいてい後ろの方にあるのが武器なしアニメの識別子なのだが文字列が同じであることがしょっちゅう。全く持って紛らわしry。 識別子があることで、パッと見でどのアニメか分かるという事と、文字列検索で飛んでこれるという利点がある。 ▼5つのポインタ 識別子の後、4バイト分のスペース00を挟んで** ** ** 08という形の物が5つ並ぶ。 これらがポインタ。一つ目のポインタから順に、「ポインタ1」「ポインタ2]・・・「ポインタ5」と呼ばれる。 各ポインタの概要は以下の通り。 ポインタ1:ポインタ2(解凍後)の各パートの開始アドレスを指定 ポインタ2:圧縮。85コマンド(効果呼び出し)と86コマンド(画像呼び出し:ポインタ3と連動)を指定。 ポインタ3:圧縮。ROM内のバラバラ画像を貼り合わせる。 ポインタ4:ポインタ3の敵側(逆向き)バージョン ポインタ5:圧縮パレットデータ 以下に、各ポインタの詳しい情報を掲載する。 ▼ポインタ1 未圧縮 ポインタ2(解凍後)の各パートの開始アドレスを指定 00 00 00 00 B0 01 00 00 60 03 00 00 A8 05 00 00 F0 07 00 00 00 08 00 00 10 08 00 00 54 08 00 00 98 08 00 00 AC 08 00 00 C0 08 00 00 D4 08 00 00 とあれば、 パート1:0x0000 パート2:0x01B0 パート3:0x0360 ~ パート12:0x08D4 …といった感じ ▼ポインタ2 要解凍 85コマンド(効果呼び出し)と86コマンド(画像呼び出し:ポインタ3と連動)で構成される。 12個のパートに分かれている。00 00 00 80で1パート終了。 パート1,2:通常攻撃アニメ。1と2は同じでもおk? パート3,4:クリティカル。3と4は同じでもおk? パート5:魔法攻撃。 パート6:魔法クリティカル。 パート7,8:回避アニメ。同じでもおk パート9,10,11:棒立ちアニメ。3つとも同じでおk パート12:攻撃よけられアニメ。パート1から、ヒットエフェクト、ヒットSEを抜けばおk ※85コマンド 4バイトで構成され、エフェクトや効果音、ダメージ処理などを行う。 ** 00 00 85:**で効果指定。 ※86コマンド 12バイトで構成され、ポインタ3で貼り合わせた1枚絵を呼び出す。GIFの1コマと思えばおk ①(05) 00 ②(0A) 86 ③(B8 40 E2 08) ④(30 03) 00 00 ①表示フレーム ②通し番号?とりあえず順番につけとけばおk ③画像の先頭アドレス。NLZ-GBAでぶっこんだ場所 ④ポインタ3(解凍後)の開始アドレスを指定 ▼ポインタ3 以下抜粋。長いので焦らず必要になった時に少しずつ読み進めるといい。 ・要解凍 ・ROM内のバラバラ画像を貼り合わせる。 ・12バイトで画像1かけら。 00 00 00 80 00 00 F0 FF E8 FF 00 00 00 80 00 40 04 00 10 00 E8 FF 00 00 00 40 00 40 80 00 F0 FF 08 00 00 00 00 00 00 00 84 00 10 00 08 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 これはロードヘクトル(斧)のポインタ3の先頭部分である。 まずは1行目 ①(00 00 00 80) ②(00) 00 ③(F0 FF) ④(E8 FF) 00 00 ★NLZ-GBAで表示される256×64の画像の、8×8を□として考え、下記のように番号を振る。まあずれるけど。 ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F 00□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 20□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 40□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 60□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 80□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ ②★の番号より、切り出す始点を指定 ここでは、①(00 00 00 80) ②(00) なので ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F 00■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 20■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 40■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 60■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 80□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ のように切り出す。 ③X座標④Y座標 切り出した画像を先頭画面のどこに配置するか指定。2バイト目が00なら正、FFなら負。 ただしXは右が正、Yは「下が」正。もちろん敵だと左右逆。 原点の位置は大体キャラの立ち位置あたりと思えばおk ここでは、③(F0 FF) ④(E8 FF)なので「原点から左に16ドット、上に24ドット」が指定位置。 ただし、切り出した画像は「左上を指定位置に合わせ、右下に展開」するので、実際には原点にかぶさるように 配置されるわけである。 ちなみにX座標を(C8 FF)ぐらいにすると、ちょうど敵の目の前あたりに配置される。 続きを配置していくと、 00 80 00 40 04 00 10 00 E8 FF 00 00 で ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F 00□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□ 20□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□ 40□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□ 60□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□ 80□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 配置座標も、ちょうどさっきの切片と接するように指定されている。 00 40 00 40 80 00 F0 FF 08 00 00 00 で ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F 00□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 20□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 40□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 60□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 80■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□ A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 00 00 00 00 84 00 10 00 08 00 00 00 で ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F 00□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 20□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 40□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 60□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 80□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□ A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 01 00 00 00 00 00 00 00 00 00 00 00 で貼り合わせ終了 以上により、貼り合わせで ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F 00■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□ 20■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□ 40■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□ 60■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□ 80■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□ A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ この部分が原点付近に描画されたことになる。NLZ-GBAで0xE23084を覗いてみればわかるが、これはヘクトルの立 ち絵そのものである。 以上は、ポインタ3の先頭部分なので開始アドレスは0x0000である。 ▼補足 画像の貼り付け先は重なっていてもよい。 その場合は、最初に切り出し貼り付けた画像が前面に来る。 よってロードヘクトル(斧)のポインタ2内にある86コマンド、 01 00 00 86 84 30 E2 08 00 00 00 00 で、ヘクトルの立ち絵が呼び出されるわけである。 おっと、ポインタ3の①の説明が抜けてた ①切り出す形を指定するコマンド。 ・00 80 00 80 ■■ ■■ ■■ ■■ ・00 40 00 80 ■■■■ ■■■■ ・00 00 00 80 ■■■■ ■■■■ ■■■■ ■■■■ ・00 80 00 40 ■ ■ ■ ■ ・00 40 00 40 ■■■■ ・00 00 00 40 ■■ ■■ ・00 80 00 00 ■ ■ ・00 40 00 00 ■■ ・00 00 00 00 ■ } すいません訂正です。 ポインタ4はポインタ3と同じとか書いたが、すまんありゃウソだった。 ポインタ3は右側(味方側)表示用、 ポインタ4は左側(敵側)表示用みたいです。 つまりポインタ3と4を同じにすると、 左側に表示されたとき背中を向けた状態になります。 ポインタ4は構造こそポインタ3と同様ですが、 (00 00 00 80)→(00 00 00 90) (00 80 00 40)→(00 80 00 50) などのように、 780に列挙した①形指定コマンドの4バイト目に+10hしたものが使われています。 これは「切り出した画像を左右反転」しているようです。 画像が左右反転しても、「左上を指定位置に合わせ、右下に展開」することは 変わらないので③X座標も変化させる必要があります。 以上のような仕様なので、 ④Y座標や②切り出し始点はポインタ3と同じでよいことになります。 ▼ポインタ5 ユニットカラーを参照 名前 コメント
https://w.atwiki.jp/tetdm/pages/22.html
アドレス演算子 #include stdio.h main() { int x = 10; printf("%p\n", x); } ポインタ変数 #include stdio.h main() { int z; int *x;//ポインタ変数xを宣言 x = z;//アドレスを代入 *x = 10;//xに代入されているアドレスに10を代入 printf("xに代入されたアドレスは%p\n アドレスxの中の値は%d\nzの値は%d\n",x,*x,z); } 演習 2つのポインタ変数に,同じアドレスを代入して,一方のポインタ変数を使って値を代入したとき,他方のポインタ変数を使って中の値を見たとき,同じ値となることを確認するプログラムを書け.